/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufrn.dimap.Visitors;
import br.ufrn.dimap.Grafo.*;
import br.ufrn.dimap.contagem.UsuarioPostSugestao;
import br.ufrn.dimap.contagem.UsuarioPostFlooders;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
/**
 *
 * 
 */
public class BuscaPalavraVisitor extends Visitor{

    private String palavra;
    private ArrayList<UsuarioPostSugestao> usuarioPost;
    private ArrayList<String> amigos;
    
    private ArrayList<UsuarioPostSugestao> sugestoes;
    private ArrayList<UsuarioPostSugestao> topFriends;
    
    public BuscaPalavraVisitor(String palavra, List<Usuario> amigos){
        this.palavra = palavra.toLowerCase();
        for (int i = 0; i < amigos.size(); i++)
            this.amigos.add(amigos.get(i).getNome());
            
    }
    
    public int posicaoUsuario(String nome)
    {
    	for (int i = 0; i < usuarioPost.size(); i++)
    	{
    		if (nome == usuarioPost.get(i).getNome())
    			return i;
    	}
    	return -1;
    }
    
    public void visit(Usuario usuario)
    {
        if(usuario.getPosts() != null)
        {
            Iterator<Postagem> posts = usuario.getPosts().iterator();
            int posicaoUser = posicaoUsuario(usuario.getNome());
            int posicaoFriend;
            while(posts.hasNext())
            {
                Postagem post = posts.next();
                
                if (post.getMensagem().toLowerCase().contains(palavra))
                    usuarioPost.get(posicaoUser).addContPosts();
                
                Iterator<Comentario> comentarios = post.getComentarios().iterator();
                while(comentarios.hasNext())
                {
                    Comentario comentario = comentarios.next();
                    //System.out.println(comentario.getMensagem());
                    if(comentario.getMensagem().toLowerCase().contains(palavra))
                    {
                        posicaoFriend = posicaoUsuario(comentario.getAutor());
                        if (posicaoFriend > -1)
                            usuarioPost.get(posicaoFriend).addContComments();
                    }
                }
            }
        }
    }
    
    public boolean isFriend (String nome)
    {
        for (int i = 0; i < amigos.size(); i++)
        {
            if (amigos.get(i) == nome)
                return true;
        }
        return false;
    }
    
    public void atualizar()
    {
        sugestoes = new ArrayList();
        topFriends = new ArrayList();
        
        //ordenar
        
        UsuarioPostSugestao user;
        for (int i = 0; i < usuarioPost.size(); i++)
        {
            user = usuarioPost.get(i);
            if (isFriend(user.getNome()))
                topFriends.add(user);
            else
                sugestoes.add(user);
        }
    }
    
    public ArrayList<UsuarioPostSugestao> getSugestoes()
    {
        return this.sugestoes;
    }
    
    public ArrayList<UsuarioPostSugestao> getTopFriends()
    {
        return this.topFriends;
    }
}
